package com.school.app.model;

import com.google.inject.Inject;
import com.school.app.dao.PenggunaDAO;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

/**
 * Hold auditing information on table. This is automatically managed by DAOs.
 */
@Embeddable
public class InfoAudit implements Serializable {
    @Inject 
    private transient PenggunaDAO pgunaDAO;
    
    private transient Pengguna pgunaMasuk;
    private transient Pengguna pgunaKkini;
    
    @Column (name="dimasuk", nullable=false)
    private String dimasukOleh;
    
    @Column (name="trh_masuk")
    @Temporal (TemporalType.TIMESTAMP)
    private Date tarikhMasuk;
    
    @Column (name="dikkini", nullable=true)
    private String dikemaskiniOleh;
    
    @Column (name="trh_kkini")
    @Temporal (TemporalType.TIMESTAMP)
    private Date tarikhKemaskini;

    public Pengguna getDikemaskiniOleh() {
        if (pgunaKkini == null && dikemaskiniOleh != null) {
            pgunaKkini = pgunaDAO.findById(dikemaskiniOleh);
        }
        return pgunaKkini;
    }

    public void setDikemaskiniOleh(Pengguna dikemaskiniOleh) {
        this.pgunaKkini = dikemaskiniOleh;
        this.dikemaskiniOleh = dikemaskiniOleh.getIdPengguna();
    }

    public Pengguna getDimasukOleh() {
        if (pgunaMasuk == null) {
            pgunaMasuk = pgunaDAO.findById(dimasukOleh);        
        }
        return pgunaMasuk;
    }

    /**
     * This is automatically handled by DAO
     * @param dimasukOleh
     * @deprecated Please do not set this manually!!!
     */
    @Deprecated
    public void setDimasukOleh(Pengguna dimasukOleh) {
        this.pgunaMasuk = dimasukOleh;
        this.dimasukOleh = dimasukOleh.getIdPengguna();
    }

    public Date getTarikhKemaskini() {
        return tarikhKemaskini;
    }

    public void setTarikhKemaskini(Date tarikhKemaskini) {
        this.tarikhKemaskini = tarikhKemaskini;
    }

    /**
     * This is automatically handled by DAO
     * @return
     * @deprecated Please do not set this manually!!!
     */
    @Deprecated
    public Date getTarikhMasuk() {
        return tarikhMasuk;
    }

    public void setTarikhMasuk(Date tarikhMasuk) {
        this.tarikhMasuk = tarikhMasuk;
    }

    public String getIdDikemaskiniOleh() {
        return dikemaskiniOleh;
    }

    public void setIdDikemaskiniOleh(String dikemaskiniOleh) {
        this.dikemaskiniOleh = dikemaskiniOleh;
    }

    public String getIdDimasukOleh() {
        return dimasukOleh;
    }

    public void setIdDimasukOleh(String dimasukOleh) {
        this.dimasukOleh = dimasukOleh;
    }
    
    
}
